package com.jrauto.CarAppBackend.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jrauto.CarAppBackend.entity.Message;
import com.jrauto.CarAppBackend.entity.dto.MessageDTO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
* @author huimin
* @description 针对表【messages(消息表)】的数据库操作Mapper
* @createDate 2025-09-10 18:45:33
* @Entity generator.domain.Messages
*/
@Mapper
public interface MessageMapper extends BaseMapper<Message> {

    /**
     * 分页查询聊天室消息
     */
    IPage<MessageDTO> selectRoomMessages(Page<MessageDTO> page, @Param("roomId") Integer roomId);

    /**
     * 查询用户未读消息
     */
    List<MessageDTO> selectUnreadMessages(@Param("userId") Integer userId);

    /**
     * 批量标记消息为已读
     */
    int batchMarkAsRead(@Param("roomId") Integer roomId, @Param("userId") Integer userId);

    /**
     * 统计未读消息数量
     */
    Integer countUnreadMessages(@Param("roomId") Integer roomId, @Param("userId") Integer userId);

    /**
     * 查询最新消息
     */
    MessageDTO selectLatestMessage(@Param("roomId") Integer roomId);

    /**
     * 获取房间内的用户ID列表
     */
    List<Integer> selectRoomUserIds(@Param("roomId") Integer roomId);

    /**
     * 获取用户的离线消息
     */
    List<Message> selectOfflineMessages(@Param("userId") Integer userId);

    /**
     * 批量标记消息为已读
     */
    int batchMarkMessagesAsRead(@Param("messageIds") List<Integer> messageIds);
}
